#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main() {
    pid_t pid1, pid2, pid3, pid4, pid5;

    // 创建第一个进程来启动 searchserver/dev 程序
    pid1 = fork();
    if (pid1 == 0) {
        // 子进程
        execlp("./searchserver/dev",NULL);
        // 如果 execlp 返回，说明出错了
        perror("execlp failed for dev");
        exit(EXIT_FAILURE);
    } else if (pid1 < 0) {
        // fork 失败
        perror("fork failed for dev");
        exit(EXIT_FAILURE);
    }

    // 延迟500毫秒
    usleep(500000);

    // 创建第二个进程来启动 STM32server/STM32server 程序
    pid2 = fork();
    if (pid2 == 0) {
        // 子进程
        execlp("./STM32server/STM32server", NULL);
        // 如果 execlp 返回，说明出错了
        perror("execlp failed for STM32server");
        exit(EXIT_FAILURE);
    } else if (pid2 < 0) {
        // fork 失败
        perror("fork failed for STM32server");
        exit(EXIT_FAILURE);
    }

    // 创建第三个进程来启动 LinkSDK02/output/data-model-basic-demo 程序
    pid3 = fork();
    if (pid3 == 0) {
        // 子进程
        execlp("./LinkSDK02/output/data-model-basic-demo", NULL);
        // 如果 execlp 返回，说明出错了
        perror("execlp failed for data-model-basic-demo");
        exit(EXIT_FAILURE);
    } else if (pid3 < 0) {
        // fork 失败
        perror("fork failed for data-model-basic-demo");
        exit(EXIT_FAILURE);
    }

    // 创建第四个进程来启动 QTserver/shmem 程序
    pid4 = fork();
    if (pid4 == 0) {
        // 子进程
        execlp("./QTserver/shmem", NULL);
        // 如果 execlp 返回，说明出错了
        perror("execlp failed for shmem");
        exit(EXIT_FAILURE);
    } else if (pid4 < 0) {
        // fork 失败
        perror("fork failed for shmem");
        exit(EXIT_FAILURE);
    }

    // 创建第五个进程来启动 searchserver/soft 程序
    pid5 = fork();
    if (pid5 == 0) {
        // 子进程
        execlp("./searchserver/soft", NULL);
        // 如果 execlp 返回，说明出错了
        perror("execlp failed for soft");
        exit(EXIT_FAILURE);
    } else if (pid5 < 0) {
        // fork 失败
        perror("fork failed for soft");
        exit(EXIT_FAILURE);
    }

    // 父进程等待所有子进程结束
    waitpid(pid1, NULL, 0);
    waitpid(pid2, NULL, 0);
    waitpid(pid3, NULL, 0);
    waitpid(pid4, NULL, 0);
    waitpid(pid5, NULL, 0);

    printf("All child processes have terminated.\n");
    return 0;
}
